#==================================================
#	Control Text Edit
#==================================================
#  操控 TextEdit 节点
# * 用于插入 TextEdit 文本的操作，上下空格格式化
#==================================================
# @datetime: 2021-9-1 21:41:40
#==================================================
extends Reference


var _textedit : TextEdit setget set_textedit, get_textedit



#==================================================
#   Set/Get
#==================================================
func get_textedit() -> TextEdit:
	return _textedit

func set_textedit(value: TextEdit) -> void:
	_textedit = value



#==================================================
#   自定义方法
#==================================================
##  插入字符串
## @text  字符串
## @line  插入所在行
func insert_text(text: String, line: int = -1) -> void:
	if line != -1:
		_textedit.cursor_set_line(line)
	_textedit.insert_text_at_cursor(text)


##  插入到新的空行
## （插入的字符串会进行换行插入）
## @text  字符串
## @line  插入的行（如果为 -1，则插入当前行）
func insert_blank_line(text: String, line:int=-1) -> void:
	var current_line := (line if line != -1 else _textedit.cursor_get_line()) 
	var line_text = _textedit.get_line(current_line)
	if line_text.strip_edges() != "":
		_textedit.cursor_set_column(line_text.length())
		_textedit.insert_text_at_cursor("\n" + text)
		_textedit.cursor_set_line(current_line + 1)
		_textedit.cursor_set_column(_textedit.get_line(current_line+1).length())
	else:
		_textedit.set_line(current_line, text)
		_textedit.cursor_set_column(text.length())


##  插入分隔空白行文本
## （插入的字符串上方和下方都会有指定个数的空白行）
## @text  插入字符串
## @up  上方插入几个空白行
## @down  下方插入几个空白行
## @line  插入的所在的行
func insert_delimited(
	text: String, 	# 插入文本
	up: int, 	# 向上的行的空白行数
	down: int, 	# 向下空白行行数
	line: int = -1	# 插入到第几行，默认是光标所在行
) -> void:
	if up < 0 || down < 0:
		printerr("[插入失败] 不能设置 up/down 的值小于 0")
		return
	# 计算换行个数
	var textedit = get_textedit()
	var current_line := (line if line != -1 else _textedit.cursor_get_line()) 
	# 上方空行个数
	var up_new_line = up
	for i in range(1, up + 1):
		var temp_line = current_line - i
		# 如果是空白行，则减 1，代表这一行不需要增加了
		if (
			temp_line > 0 
			&& textedit.get_line(temp_line).strip_edges() == ""
		):
			up_new_line -= 1
		else:
			break
	# 当前行不是空白行，则插入换行
	if textedit.get_line(current_line).strip_edges() != "":
		up_new_line += 1
	# 下方空行个数
	var down_new_line = down
	for i in range(1, down + 1):
		var temp_line = current_line + i
		# 如果是空白行，则减 1，代表这一行不需要增加了
		if (
			temp_line < textedit.get_line_count()
			&& textedit.get_line(temp_line).strip_edges() == ""
		):
			down_new_line -= 1
		else:
			break
	# 添加换行符
	text = "\n".repeat(up_new_line) + text + "\n".repeat(down_new_line)
	# 设置光标到末尾
	textedit.cursor_set_column(textedit.get_line(current_line).length())
	textedit.insert_text_at_cursor(text)
